package com.powerunion.datacollection.common;

public class UUIDGenerator {
	  private final static String chars64 =
	      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

	  /**
	   * 返回一个唯一的16位字符串。
	   * 基于： 32位当前时间，32位对象的identityHashCode和32位随机数
	   *
	   * @param o Object对象
	   * @return uuid 一个16位的字符串
	   */
	  public final static String generate(Object o) {
	    long id1 = System.currentTimeMillis() & 0xFFFFFFFFL;
	    long id2 = System.identityHashCode(o);
	    long id3 = OtherTools.randomLong( -0x80000000L, 0x80000000L) &
	        0xFFFFFFFFL;

	    id1 <<= 16;
	    id1 += (id2 & 0xFFFF0000L) >> 16;
	    id3 += (id2 & 0x0000FFFFL) << 32;

	    return FormatUtil.convert(id1, 6, chars64) +
	        FormatUtil.convert(id3, 6, chars64);
	  }

	  /**
	   * 返回10个随机字符（基于目前时间和一个随机字符串）
	   *
	   * @return String
	   */
	  public final static String generate() {
	    long id1 = System.currentTimeMillis() & 0x3FFFFFFFL;
	    long id3 = OtherTools.randomLong( -0x80000000L, 0x80000000L) &
	        0x3FFFFFFFL;

	    return FormatUtil.convert(id1, 6, chars64) +
	        FormatUtil.convert(id3, 6, chars64);
	  }
	  
	  /**
	   * 返回18个随机数字（基于目前时间和一个随机字符串）
	   *
	   * @return String
	   */
	  public final static String generate4Number() {
	    long id1 = System.currentTimeMillis() & 0x3FFFFFFFL;
	    long id3 = OtherTools.randomLong( -0x80000000L, 0x80000000L) &
	        0x3FFFFFFFL;
	    String id = String.valueOf(id1)+String.valueOf(id3);
	    return id;
	  }
	  
	  public static void main(String[] args){
		  for(int i=0;i<10;i++){
			  String seq = UUIDGenerator.generate4Number();
			  System.out.println(i+":"+seq);
		  }
		
		  int test = Integer.parseInt("158729315279487379");
		  System.out.println("test:"+test);
	  }

	}
